In a multitasking data processing system, a control function must be used to insure that the integrity of data shared by more than one process of the system is maintained at all times. This is called concurrency control. Absent a concurrency control function, it is possible for data in the process of being queried by one process to be modified by an updating process after the query is begun, but before it is complete, and vice versa. In the case of uniprocessor systems, this can occur because of the timesharing nature of operation of the systems. Tasks, such as update and query, are sequentially allotted small slices of time by the system executive program during which they process their work in segments. In the case of multiprocessor systems, and especially those involving memory shared by individual processors, obvious, conflicts can arise when asynchronous processes on different processors attempt to access the shared memory. Thus, it is possible and likely that a query of data can be interrupted and the data being queried changed by another process before the query is completed. In this case, the query task would likely receive corrupted (inconsistent) data. In structured database systems, for example, concurrency control is usually done by locking data records during both update and query operations. A lock is owned by the updating or querying process. Other processes are denied access to a record while it is locked. Of course, the data integrity problem is not limited to structured databases. Any type of data which is accessible by more than one process can, in general, be subject to data corruption, absent an effective concurrency control function.
There are many concurrency control techniques which operate satisfactorily to insure data integrity. A good overview of such techniques is given in the Prentice-Hall book PARALLELISM IN HARDWARE AND SOFTWARE: REAL AND APPARENT CONCURRENCY, by Harold Lorin. However, all such techniques limit system throughput to some extent. This is caused by overhead in managing the locks and in data access delays or denials caused when locks are in effect. It is desirable to find new methods to minimize the effect on system throughput caused by the need for concurrency control.